function userName = getUserAccount
% this function returns user name with priority order:
% 1. MBD_PLATFORM_USERNAME environment variable (highest priority)
% 2. System username environment variable (multiple attempts)
% 3. System calls as backup
% 4. Unknown User as fallback

try
    % 第一优先级：检查MBD_PLATFORM_USERNAME环境变量
    mbdUserName = getenv('MBD_PLATFORM_USERNAME');
    if ~isempty(mbdUserName)
        userName = mbdUserName;
        fprintf('✅ 获取用户名成功（MBD_PLATFORM_USERNAME）: %s\n', userName);
        return;
    end
    
    % 第二优先级：系统用户名环境变量（多种尝试）
    userName = '';
    if ispc
        % Windows系统：尝试多个可能的环境变量
        windowsVars = {'USERNAME', 'username', 'USER', 'LOGNAME'};
        for i = 1:length(windowsVars)
            userName = getenv(windowsVars{i});
            if ~isempty(userName)
                fprintf('✅ 获取用户名成功（%s）: %s\n', windowsVars{i}, userName);
                return;
            end
        end
        
        % Windows备选方案：尝试系统调用
        try
            [status, result] = system('echo %USERNAME%');
            if status == 0 && ~isempty(strtrim(result))
                userName = strtrim(result);
                if ~strcmp(userName, '%USERNAME%')  % 确保不是未展开的变量
                    fprintf('✅ 获取用户名成功（echo %%USERNAME%%）: %s\n', userName);
                    return;
                end
            end
        catch
            % 系统调用失败，继续下一步
        end
        
    else
        % Unix/Linux系统：尝试多个可能的环境变量
        unixVars = {'USER', 'LOGNAME', 'USERNAME'};
        for i = 1:length(unixVars)
            userName = getenv(unixVars{i});
            if ~isempty(userName)
                fprintf('✅ 获取用户名成功（%s）: %s\n', unixVars{i}, userName);
                return;
            end
        end
        
        % Unix备选方案：尝试系统调用
        try
            [status, result] = system('whoami');
            if status == 0 && ~isempty(strtrim(result))
                userName = strtrim(result);
                fprintf('✅ 获取用户名成功（whoami）: %s\n', userName);
                return;
            end
        catch
            % 系统调用失败，继续下一步
        end
    end
    
    % 如果所有方法都失败，使用默认值
    if isempty(userName)
        userName = 'Unknown User';
        fprintf('⚠️ 无法获取用户名，使用默认值: %s\n', userName);
    end
    
catch ME
    userName = 'Unknown User';
    fprintf('❌ 获取用户名时发生错误: %s，使用默认值: %s\n', ME.message, userName);
end

end